"""
# -*- coding: utf-8 -*-
# @Time    : 2023/6/5 9:21
# @Author  : 王摇摆
# @FileName: Data.py
# @Software: PyCharm
# @Blog    ：https://blog.csdn.net/weixin_44943389?type=blog
"""
# 构建数据样本并可视化
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 选择一个本地的支持中文的字体
'''
在此程序中用来生成数据集样本并完成可视化工作
'''

# X为样本特征，Y为样本簇类别，共1000个样本，每个样本3个特征，共4个簇
X, y = make_blobs(n_samples=10000, n_features=3, centers=[[3, 3, 3], [0, 0, 0], [1, 1, 1], [2, 2, 2]],
                  cluster_std=[0.2, 0.1, 0.2, 0.2],
                  random_state=9)
fig = plt.figure()
ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=30, azim=20)
plt.scatter(X[:, 0], X[:, 1], X[:, 2], marker='x')
plt.title('原始数据可视化')
ax.set_xlabel('特征1')
ax.set_ylabel('特征2')
ax.set_zlabel('特征3')
plt.show()

# 对数据投影，查看三个维度的方差分布
from sklearn.decomposition import PCA

pca = PCA(n_components=3)
pca.fit(X)
print('降维前的数据方差比率和方差值如下所示：')
print(pca.explained_variance_ratio_)
print(pca.explained_variance_)

# 数据降到2维处理
pca = PCA(n_components=2)
pca.fit(X)
print('降维后的数据方差比率和方差值如下所示：')
print(pca.explained_variance_ratio_)
print(pca.explained_variance_)

# 降维数据可视化
X_new = pca.transform(X)
plt.scatter(X_new[:, 0], X_new[:, 1], marker='x')
plt.title('降维后数据可视化')
plt.xlabel('主成分1')
plt.ylabel('主成分2')
plt.show() # 就是说明数据在降维之后依然可以看到4个簇

